En este trabajo se abordará el problema de agrupar los barrios de Medellín de acuerdo a distintas dimensiones y analizar espacialmente las agrupaciones.
#Dimensión Vivienda y Servicios Públicos
La dimensión de vivienda y servicios públicos miden dentro de la encuesta de calidad de vida como viven los Medellinenses, en que condiciones estan sus hogares a nivel de tipo de vivienda y sus características físicas: material de paredes y pisos tenencias y financiación de la vivienda: tipo de tenencia de la vivienda; tenencia de escritura de propiedad; subsidios recibidos para la compra, construcción, mejora, titulación o escrituración de la vivienda
Para la el análisis de la dimensión de VIVIENDA Y SERVICIOS PUBLICOS en los barrios de Medellín se toman las siguientes preguntas con sus respectivos indicadores:
Fórmula: Cantidad de hogares que llegaron al barrio por problemas de orden público / Número total de hogares
Fórmula: Sumatoria de los tiempos de permanencia de las personas en el barrio / Número total de hogares
Fórmula: Cantidad de hogares que viven en …. / Número total de hogares
Fórmula: Cantidad de hogares que toman el agua de entidades prestadoras de servicios públicos domiciliarios / Número total de hogares
Fórmula: Cantidad de hogares con acceso al menos uno de los servicios públicos básicos / Número total de hogares
P_160 - La unidad de vivienda cuenta con servicios públicos de Estado Suspendido Energía (1) P_164 - La unidad de vivienda cuenta con servicios públicos de Estado Suspendido Acueducto (1) P_173 - La unidad de vivienda cuenta con servicios públicos de Estado Suspendido Gas Natural (1) P_169 - La unidad de vivienda cuenta con servicios públicos de Estado Suspendido Telefono (línea fija) (1) P_180 - La unidad de vivienda cuenta con servicios públicos de Estado Suspendido Internet (1)
Fórmula: Número de hogares con algún servicios públicos suspendido / Número total de hogares
Fórmula: Número de hogares con con servicios públicos de Conexión a Internet / Número total de hogares
Fórmula: Número de hogares ocupadas bajo la caracteristicas de cada uno de los indicadores / Número total de hogares
El insumo principal de este trabajo son los datos abiertos del portal Medata[1] y en particular la Encuesta de Calidad de Vida Medellín Cómo vamos.
ECV <- read.csv("./dataSet/encuesta_calidad_vida.csv", header = TRUE, sep=";")
Librerias a utilizar en el desarrollo del proyecto
#library(xlsx)
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(cluster)
library(plyr)
library(ggplot2)
library(GGally)
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:GGally':
##
## nasa
## The following objects are masked from 'package:plyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(magrittr)
library('sqldf')
## Loading required package: gsubfn
## Loading required package: proto
## Loading required package: RSQLite
library(rgdal)
## Loading required package: sp
## rgdal: version: 1.4-8, (SVN revision 845)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 2.4.2, released 2019/06/28
## Path to GDAL shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/gdal
## GDAL binary built with GEOS: FALSE
## Loaded PROJ.4 runtime: Rel. 5.2.0, September 15th, 2018, [PJ_VERSION: 520]
## Path to PROJ.4 shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/proj
## Linking to sp version: 1.3-2
library(leaflet)
library(plotly)
##
## Attaching package: 'plotly'
## The following objects are masked from 'package:plyr':
##
## arrange, mutate, rename, summarise
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
Función que permite sacar la moda para las preguntas orientadas a hogares
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
Se procede a normalizar las cabeceras del dataframe del set de datos
names_ECV <- names(ECV)
i = 1
l_names <- list()
for (name_col in names_ECV) {
str_col <- unlist(strsplit(name_col," "))
str_col <- unlist(strsplit(str_col,"[.]"))
if (length(str_col) > 2){
l_names[i] <- paste(str_col[2],str_col[3],sep = '_')
}
else
{
l_names[i] <- paste(str_col[2])
}
i = i + 1
}
ECV <- setNames(ECV,l_names)
##1. Caracterización de las dimensiones para la dimensión VIVIENDA Y SERVICIOS PUBLICOS
Construcción del dataframe con las preguntas de interes para la dimensión vivienda y servicios públicos
ECV_VIVIENDA <- ECV[,c("encuesta","persona","comuna","barrio","estrato","p_1","p_12","p_26","p_30","p_146",
"p_149","p_158","p_160","p_162","p_164","p_165","p_169","p_173","p_174","p_178","p_180","p_226")]
No existen valores nulos dentro de las preguntas de vivienda
summary(ECV_VIVIENDA)
## encuesta persona comuna
## Min. :1.201e+04 Min. : 1.000 MANRIQUE : 28951
## 1st Qu.:5.812e+07 1st Qu.: 1.000 BELEN : 26330
## Median :4.713e+08 Median : 2.000 ARANJUEZ : 24860
## Mean :1.424e+09 Mean : 2.641 POPULAR : 22587
## 3rd Qu.:1.592e+09 3rd Qu.: 4.000 ROBLEDO : 22051
## Max. :7.489e+09 Max. :20.000 DOCE DE OCTUBRE: 21787
## (Other) :184008
## barrio estrato p_1
## CABECERA SAN ANT DE PR. : 8987 Min. :1.000 1 : 76725
## LAS GRANJAS : 5192 1st Qu.:2.000 2 :222915
## MORAVIA : 4537 Median :2.000 NULL: 30934
## SANTO DOMINGO SABIO Nº 1: 4152 Mean :2.701
## POPULAR : 4027 3rd Qu.:3.000
## CASTILLA : 3873 Max. :6.000
## (Other) :299806
## p_12 p_26 p_30 p_146
## Min. : 1.000 Min. :-99.00 Min. :-99.00 Min. :1.000
## 1st Qu.: 3.000 1st Qu.:-88.00 1st Qu.: 3.00 1st Qu.:4.000
## Median : 4.000 Median :-88.00 Median : 11.00 Median :4.000
## Mean : 4.281 Mean :-60.64 Mean : 12.15 Mean :4.355
## 3rd Qu.: 5.000 3rd Qu.: 1.00 3rd Qu.: 26.00 3rd Qu.:5.000
## Max. :20.000 Max. : 11.00 Max. :106.00 Max. :5.000
##
## p_149 p_158 p_160 p_162
## Min. : 1.000 Min. :-88.000 Min. :-88.000 Min. :1.000
## 1st Qu.: 1.000 1st Qu.: 1.000 1st Qu.: 2.000 1st Qu.:1.000
## Median : 1.000 Median : 1.000 Median : 2.000 Median :1.000
## Mean : 1.079 Mean : 1.001 Mean : 1.776 Mean :1.011
## 3rd Qu.: 1.000 3rd Qu.: 1.000 3rd Qu.: 2.000 3rd Qu.:1.000
## Max. :10.000 Max. : 2.000 Max. : 2.000 Max. :2.000
##
## p_164 p_165 p_169 p_173
## Min. :-88.000 Min. :1.000 Min. :-88.00 Min. :-88.00
## 1st Qu.: 2.000 1st Qu.:1.000 1st Qu.: 2.00 1st Qu.:-88.00
## Median : 2.000 Median :1.000 Median : 2.00 Median : 2.00
## Mean : 0.647 Mean :1.031 Mean :-11.95 Mean :-24.41
## 3rd Qu.: 2.000 3rd Qu.:1.000 3rd Qu.: 2.00 3rd Qu.: 2.00
## Max. : 2.000 Max. :2.000 Max. : 2.00 Max. : 2.00
##
## p_174 p_178 p_180 p_226
## Min. :1.000 Min. :1.000 Min. :-88.00 Min. :-99.000
## 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:-88.00 1st Qu.: 1.000
## Median :1.000 Median :1.000 Median : 2.00 Median : 3.000
## Mean :1.015 Mean :1.428 Mean :-36.55 Mean : 2.314
## 3rd Qu.:1.000 3rd Qu.:2.000 3rd Qu.: 2.00 3rd Qu.: 3.000
## Max. :2.000 Max. :2.000 Max. : 2.00 Max. : 6.000
##
Se procede a realizar el cálculo de cada uno de los indicadores definidos para la dimensión Vivienda y
#Se toma el máximo número de integrantes por encuesta
ECV_VIVIENDA_BARRIO <-ECV_VIVIENDA %>% select(encuesta,comuna, barrio,p_12) %>%
group_by(encuesta, comuna, barrio) %>%
summarise(total = n_distinct(encuesta),p_12 = max(p_12)) %>% ungroup() %>%
group_by(comuna,barrio) %>% summarise(total = sum(total), p_12 = sum(p_12) / sum(total)) %>% ungroup()
#write.xlsx(ECV_VIVIENDA[ECV_VIVIENDA$barrio == 'AGUAS FRÍAS',], 'aguasfrias2.xlsx')
#ECV_VIVIENDA[,c("p_26")]
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_26 == 1,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_26 = min(p_26)) %>% ungroup() %>%
group_by(comuna,barrio) %>% summarise(p_26 = sum(p_26)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_26 <- ECV_VIVIENDA_BARRIO$p_26 / ECV_VIVIENDA_BARRIO$total
ECV_VIVIENDA$p_antiguedad <- ifelse(ECV_VIVIENDA$p_30 >= 0 & ECV_VIVIENDA$p_30 <= 5, 1, ifelse(ECV_VIVIENDA$p_30 < 0, 0, 2))
# 1 menos de 5 años, 0 No sabe, 2 más de 6 años
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_antiguedad == 2,] %>%
group_by(encuesta, comuna ,barrio) %>% summarise(p_30 = n_distinct(p_antiguedad)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_30 = sum(p_30)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_30 <- ECV_VIVIENDA_BARRIO$p_30 / ECV_VIVIENDA_BARRIO$total
*Cálculo P_146_1. Porcentaje de hogares del barrio que viven en Rancho o vivienda de desechos
#ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 1,]
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 1,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total
colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_1'
*Cálculo P_146_2. Porcentaje de hogares del barrio que viven en Cuarto(s)
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 2,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total
colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_2'
*Cálculo P_146_3. Porcentaje de hogares del barrio que viven en Cuartos en inquilinato
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 3,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total
colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_3'
*Cálculo P_146_4. Porcentaje de hogares del barrio que viven en Apartamento
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 4,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total
colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_4'
*Cálculo P_146_5. Porcentaje de hogares del barrio que viven en Casa
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_146 == 5,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_146 = n_distinct(p_146)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_146 = sum(p_146)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_146 <- ECV_VIVIENDA_BARRIO$p_146 / ECV_VIVIENDA_BARRIO$total
colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_146'] <- 'p_146_5'
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_149 == 1,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_149 = getmode(p_149)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_149 = sum(p_149)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_149 <- ECV_VIVIENDA_BARRIO$p_149 / ECV_VIVIENDA_BARRIO$total
ECV_VIVIENDA$p_SP <- ifelse(ECV_VIVIENDA$p_158 == 1 & ECV_VIVIENDA$p_162 == 1 & ECV_VIVIENDA$p_165 == 1
& ECV_VIVIENDA$p_174 == 1, 1, 0)
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_SP == 1,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_SP = getmode(p_SP)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_SP = sum(p_SP)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_SP <- ECV_VIVIENDA_BARRIO$p_SP / ECV_VIVIENDA_BARRIO$total
ECV_VIVIENDA$p_SPS <- ifelse(ECV_VIVIENDA$p_160 == 1 | ECV_VIVIENDA$p_164 == 1 | ECV_VIVIENDA$p_173 == 1
| ECV_VIVIENDA$p_169 == 1 | ECV_VIVIENDA$p_180 == 1, 1, 0)
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_SPS == 1,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_SPS = getmode(p_SPS)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_SPS = sum(p_SPS)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_SPS <- ECV_VIVIENDA_BARRIO$p_SPS / ECV_VIVIENDA_BARRIO$total
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_178 == 1,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_178 = min(p_178)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_178 = sum(p_178)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_178 <- ECV_VIVIENDA_BARRIO$p_178 / ECV_VIVIENDA_BARRIO$total
*P_226_1. Porcentaje de hogares en arriendo o subarriendo mensual
tmp <- ECV_VIVIENDA[ECV_VIVIENDA$p_226 == 1,] %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_226 = n_distinct(encuesta)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_226 = sum(p_226)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_226 <- ECV_VIVIENDA_BARRIO$p_226 / ECV_VIVIENDA_BARRIO$total
colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_226'] <- 'p_226_1'
*P_226_2. Porcentaje de hogares con propia
tmp <- subset(ECV_VIVIENDA, p_226 == 2 | p_226 == 3) %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_226 = n_distinct(encuesta)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_226 = sum(p_226)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_226 <- ECV_VIVIENDA_BARRIO$p_226 / ECV_VIVIENDA_BARRIO$total
colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_226'] <- 'p_226_2'
*P_226_3. Porcentaje de hogares en otras condiciones
tmp <- subset(ECV_VIVIENDA, p_226 == 4 | p_226 == 5 | p_226 == 6) %>%
group_by(encuesta, comuna, barrio) %>% summarise(p_226 = n_distinct(encuesta)) %>% ungroup() %>%
group_by(comuna, barrio) %>% summarise(p_226 = sum(p_226)) %>% ungroup()
ECV_VIVIENDA_BARRIO <- merge(x = ECV_VIVIENDA_BARRIO, y = tmp,by.x=(c("comuna", "barrio")), all.x = TRUE)
if(exists('tmp')) rm(tmp)
ECV_VIVIENDA_BARRIO$p_226 <- ECV_VIVIENDA_BARRIO$p_226 / ECV_VIVIENDA_BARRIO$total
colnames(ECV_VIVIENDA_BARRIO)[colnames(ECV_VIVIENDA_BARRIO) == 'p_226'] <- 'p_226_3'
Depuración de columnas
ECV_VIVIENDA_BARRIO$total <- NULL
Estadisticas básicas VIVIENDA
summary(ECV_VIVIENDA_BARRIO)
## comuna barrio p_12 p_26
## EL POBLADO : 22 SAN PABLO : 3 Min. :1.333 Min. :0.00228
## ROBLEDO : 22 EL LLANO : 2 1st Qu.:3.144 1st Qu.:0.02949
## BELEN : 21 EL SALADO : 2 Median :3.500 Median :0.05013
## SAN CRISTOBAL: 21 LA ESPERANZA: 2 Mean :3.446 Mean :0.06946
## SAN JAVIER : 19 LA FLORIDA : 2 3rd Qu.:3.754 3rd Qu.:0.08945
## VILLA HERMOSA: 18 LA PALMA : 2 Max. :4.444 Max. :0.33880
## (Other) :187 (Other) :297 NA's :35
## p_30 p_146_1 p_146_2 p_146_3
## Min. :0.2561 Min. :0.00073 Min. :0.00121 Min. :0.00096
## 1st Qu.:0.6682 1st Qu.:0.00251 1st Qu.:0.00432 1st Qu.:0.00231
## Median :0.7382 Median :0.00826 Median :0.00619 Median :0.00311
## Mean :0.7195 Mean :0.01356 Mean :0.01312 Mean :0.00577
## 3rd Qu.:0.7843 3rd Qu.:0.01852 3rd Qu.:0.01129 3rd Qu.:0.00521
## Max. :1.0000 Max. :0.08511 Max. :0.33333 Max. :0.04762
## NA's :1 NA's :261 NA's :127 NA's :245
## p_146_4 p_146_5 p_149 p_SP
## Min. :0.07407 Min. :0.02155 Min. :0.08889 Min. :0.1556
## 1st Qu.:0.52805 1st Qu.:0.27375 1st Qu.:0.93085 1st Qu.:0.9145
## Median :0.63500 Median :0.35847 Median :0.98868 Median :0.9685
## Mean :0.61220 Mean :0.39703 Mean :0.89359 Mean :0.8969
## 3rd Qu.:0.72866 3rd Qu.:0.47640 3rd Qu.:0.99813 3rd Qu.:0.9838
## Max. :1.00000 Max. :1.00000 Max. :1.00000 Max. :1.0000
## NA's :9 NA's :2 NA's :1
## p_SPS p_178 p_226_1 p_226_2
## Min. :0.02174 Min. :0.03571 Min. :0.07143 Min. :0.1892
## 1st Qu.:0.06149 1st Qu.:0.36346 1st Qu.:0.28603 1st Qu.:0.5325
## Median :0.08341 Median :0.51264 Median :0.35000 Median :0.5793
## Mean :0.08691 Mean :0.53196 Mean :0.34257 Mean :0.5936
## 3rd Qu.:0.10582 3rd Qu.:0.69951 3rd Qu.:0.39198 3rd Qu.:0.6429
## Max. :0.28125 Max. :1.00000 Max. :1.00000 Max. :1.0000
## NA's :20 NA's :3 NA's :5 NA's :1
## p_226_3
## Min. :0.008621
## 1st Qu.:0.048632
## Median :0.066667
## Mean :0.076476
## 3rd Qu.:0.090909
## Max. :0.428571
## NA's :17
##2. Agrupamientos
Para efectos de la ejecución de los modelos, los valores del data frame ECV_VIVIENDA_BARRIO que sean nulos se llenan con 0 dado que cuando se presenta un valor NAN significa que el indicador no aplica para el barrio y el cero lo representa
ECV_VIVIENDA_BARRIO[is.na(ECV_VIVIENDA_BARRIO)] <- 0
Si bien, la mayoria de los indicadores del dataframe ECV_VIVIENDA_BARRIO se encuentran en función de hogares existe un indicador en función de personas del hogar, por lo tanto es necesario poner todos los indicadores en la misma escala
#Kmeans no acepta variables categoricas, el identificador del barrio se convierte en nombre de filas para que no sean consideras por el algoritmo
#ECV_VIVIENDA_BARRIO_SCALE <- tibble::column_to_rownames(ECV_VIVIENDA_BARRIO, var = c("comuna","barrio"))
#ECV_VIVIENDA_BARRIO_SCALE <- scale(ECV_VIVIENDA_BARRIO_SCALE)
#ECV_VIVIENDA_BARRIO_SCALE <- ECV_VIVIENDA_BARRIO %>% mutate_if(is.numeric,scale)
ECV_VIVIENDA_BARRIO_CP <- ECV_VIVIENDA_BARRIO
#Concatenación de comuna y barrio ya que existen nombres iguales de barrio en diferentes comunas
ECV_VIVIENDA_BARRIO_CP$barrio <- paste(ECV_VIVIENDA_BARRIO_CP$comuna,ECV_VIVIENDA_BARRIO_CP$barrio,sep = "-")
ECV_VIVIENDA_BARRIO_CP$comuna <- NULL
ECV_VIVIENDA_BARRIO_SCALE <- tibble::column_to_rownames(ECV_VIVIENDA_BARRIO_CP, var = "barrio")
Se utilizan diferentes métodos para determinar el k óptimo a utilizar en el algoritmo de clusterización - Kmeans
fviz_nbclust(ECV_VIVIENDA_BARRIO_SCALE, kmeans, method = "wss") + labs(title= "Número óptimo de Clusters") + xlab("Número de Cluster (K)")
SS <- fviz_nbclust(ECV_VIVIENDA_BARRIO_SCALE, kmeans, method = "wss")
plot(2:10,diff(SS$data$y), type = "h", main="Diferencia en errores", xlab="k", ylab="diff")
fviz_nbclust(ECV_VIVIENDA_BARRIO_SCALE, kmeans, method = "silhouette")
De acuerdo a las gráficas de los diferentes métodos, se concluye que k = 3, es el k óptimo para la dimensión VIVIENDA Y SERVICIOS PUBLICOS, por lo cual aplicaremos el algoritmo Kmeans con dicho valor de k
#ECV_VIVIENDA_BARRIO[,3:15]
set.seed(1988)
kmeans_model <- kmeans(ECV_VIVIENDA_BARRIO_SCALE, 3, nstart = 50)
El modelo da un ajuste del 60.4% con k = 3
Se procede a agregar el cluster a la data original
df_member <- cbind(ECV_VIVIENDA_BARRIO, cluster = kmeans_model$cluster)
head(df_member)
## comuna
## ALTAVISTA-AGUAS FRÍAS ALTAVISTA
## ALTAVISTA-ALTAVISTA CENTRAL ALTAVISTA
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA ALTAVISTA
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN ALTAVISTA
## ALTAVISTA-BUGA PATIO BONITO ALTAVISTA
## ALTAVISTA-CABECERA ALTAVISTA ALTAVISTA
## barrio
## ALTAVISTA-AGUAS FRÍAS AGUAS FRÍAS
## ALTAVISTA-ALTAVISTA CENTRAL ALTAVISTA CENTRAL
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA ÁREA DE EXPANSIÓN ALTAVISTA
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN ÁREA DE EXPANSIÓN BELÉN RINCÓN
## ALTAVISTA-BUGA PATIO BONITO BUGA PATIO BONITO
## ALTAVISTA-CABECERA ALTAVISTA CABECERA ALTAVISTA
## p_12 p_26 p_30
## ALTAVISTA-AGUAS FRÍAS 3.500000 0.13888889 0.7777778
## ALTAVISTA-ALTAVISTA CENTRAL 3.673913 0.02173913 0.8188406
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA 3.544118 0.13235294 0.6176471
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 2.829268 0.02439024 0.2560976
## ALTAVISTA-BUGA PATIO BONITO 3.775281 0.15730337 0.8651685
## ALTAVISTA-CABECERA ALTAVISTA 4.048780 0.19512195 0.9024390
## p_146_1 p_146_2 p_146_3
## ALTAVISTA-AGUAS FRÍAS 0 0.000000000 0
## ALTAVISTA-ALTAVISTA CENTRAL 0 0.007246377 0
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA 0 0.014705882 0
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 0 0.000000000 0
## ALTAVISTA-BUGA PATIO BONITO 0 0.000000000 0
## ALTAVISTA-CABECERA ALTAVISTA 0 0.000000000 0
## p_146_4 p_146_5 p_149
## ALTAVISTA-AGUAS FRÍAS 0.5277778 0.47222222 0.7222222
## ALTAVISTA-ALTAVISTA CENTRAL 0.4130435 0.57971014 0.4275362
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA 0.7647059 0.22058824 0.9705882
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 0.9756098 0.02439024 0.9756098
## ALTAVISTA-BUGA PATIO BONITO 0.4157303 0.58426966 0.2808989
## ALTAVISTA-CABECERA ALTAVISTA 0.3902439 0.60975610 0.6341463
## p_SP p_SPS p_178
## ALTAVISTA-AGUAS FRÍAS 0.8611111 0.00000000 0.3333333
## ALTAVISTA-ALTAVISTA CENTRAL 0.8043478 0.02173913 0.3043478
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA 0.9852941 0.08823529 0.4852941
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 0.9512195 0.04878049 0.9146341
## ALTAVISTA-BUGA PATIO BONITO 0.7640449 0.07865169 0.2134831
## ALTAVISTA-CABECERA ALTAVISTA 0.9512195 0.09756098 0.1951220
## p_226_1 p_226_2 p_226_3
## ALTAVISTA-AGUAS FRÍAS 0.4444444 0.4722222 0.08333333
## ALTAVISTA-ALTAVISTA CENTRAL 0.3550725 0.5507246 0.09420290
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA 0.3676471 0.5000000 0.13235294
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 0.2560976 0.6951220 0.04878049
## ALTAVISTA-BUGA PATIO BONITO 0.3033708 0.5730337 0.12359551
## ALTAVISTA-CABECERA ALTAVISTA 0.3658537 0.5853659 0.07317073
## cluster
## ALTAVISTA-AGUAS FRÍAS 3
## ALTAVISTA-ALTAVISTA CENTRAL 1
## ALTAVISTA-ÁREA DE EXPANSIÓN ALTAVISTA 3
## ALTAVISTA-ÁREA DE EXPANSIÓN BELÉN RINCÓN 2
## ALTAVISTA-BUGA PATIO BONITO 1
## ALTAVISTA-CABECERA ALTAVISTA 3
Visualizando los grupos
fviz_cluster(kmeans_model, data = ECV_VIVIENDA_BARRIO_SCALE, geom = "point") + ggtitle("Distribución de los barrios en los clusters")
Recordemos las indicadores asociados a la dimensión VIVIENDA
Análisis para cada uno de los grupos
Grupo 1
summary(df_member[df_member$cluster == 1,])
## comuna barrio p_12
## SAN CRISTOBAL :13 EL LLANO : 2 Min. :2.909
## SANTA ELENA :11 ALTAVISTA CENTRAL : 1 1st Qu.:3.217
## PALMITAS : 8 BARRO BLANCO : 1 Median :3.468
## SAN ANTONIO DE PRADO: 7 BOQUERÓN : 1 Mean :3.542
## ALTAVISTA : 4 BUGA PATIO BONITO : 1 3rd Qu.:3.806
## ARANJUEZ : 0 CORREGIMIENTO PALMITAS: 1 Max. :4.444
## (Other) : 0 (Other) :36
## p_26 p_30 p_146_1 p_146_2
## Min. :0.00000 Min. :0.0000 Min. :0.000000 Min. :0.00000
## 1st Qu.:0.00000 1st Qu.:0.7428 1st Qu.:0.000000 1st Qu.:0.00000
## Median :0.01613 Median :0.7812 Median :0.000000 Median :0.00000
## Mean :0.03763 Mean :0.7535 Mean :0.003572 Mean :0.01586
## 3rd Qu.:0.03590 3rd Qu.:0.8446 3rd Qu.:0.000000 3rd Qu.:0.00000
## Max. :0.30496 Max. :1.0000 Max. :0.085106 Max. :0.33333
##
## p_146_3 p_146_4 p_146_5 p_149
## Min. :0 Min. :0.00000 Min. :0.5625 Min. :0.0000
## 1st Qu.:0 1st Qu.:0.08578 1st Qu.:0.7434 1st Qu.:0.2900
## Median :0 Median :0.16667 Median :0.8000 Median :0.4275
## Mean :0 Mean :0.17412 Mean :0.8064 Mean :0.4327
## 3rd Qu.:0 3rd Qu.:0.22650 3rd Qu.:0.9045 3rd Qu.:0.5384
## Max. :0 Max. :0.43750 Max. :1.0000 Max. :1.0000
##
## p_SP p_SPS p_178 p_226_1
## Min. :0.1556 Min. :0.00000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.3525 1st Qu.:0.00000 1st Qu.:0.1515 1st Qu.:0.1348
## Median :0.5556 Median :0.06364 Median :0.2706 Median :0.2000
## Mean :0.5486 Mean :0.06409 Mean :0.2726 Mean :0.2163
## 3rd Qu.:0.7230 3rd Qu.:0.09233 3rd Qu.:0.3732 3rd Qu.:0.2913
## Max. :1.0000 Max. :0.28125 Max. :1.0000 Max. :0.6667
##
## p_226_2 p_226_3 cluster
## Min. :0.3333 Min. :0.00000 Min. :1
## 1st Qu.:0.5804 1st Qu.:0.03689 1st Qu.:1
## Median :0.6667 Median :0.09420 Median :1
## Mean :0.6833 Mean :0.10129 Mean :1
## 3rd Qu.:0.7854 3rd Qu.:0.13810 3rd Qu.:1
## Max. :1.0000 Max. :0.33333 Max. :1
##
Barrios donde predominan las casas, el 80% de los hogares viven en casas, con un promedio de 3.5 habitantes por hogar, sus propiedades en más del 60% son propias, no todos los hogares toman el agua de las entidades prestadoras de servicios públicos y al menos el 54% de los hogares tienen acceso a los servicios públicos básicos, muy pocos (6%) de los que tienen acceso a los servicios públicos lo tienen suspendido. Solo el 27% de los hogares tienen acceso a internet
Grupo 2
summary(df_member[df_member$cluster == 2,])
## comuna barrio
## EL POBLADO :22 ALEJANDRÍA : 1
## BELEN :17 ALEJANDRO ECHAVARRÍA : 1
## LAURELES-ESTADIO:15 ALTAMIRA : 1
## LA CANDELARIA :12 ALTOS DEL POBLADO : 1
## LA AMERICA :11 AREA DE EXPANCION SAN CRISTOBAL: 1
## ROBLEDO : 6 ÁREA DE EXPANSIÓN BELÉN RINCÓN : 1
## (Other) :14 (Other) :91
## p_12 p_26 p_30 p_146_1
## Min. :1.333 Min. :0.00000 Min. :0.2561 Min. :0
## 1st Qu.:2.837 1st Qu.:0.01397 1st Qu.:0.6184 1st Qu.:0
## Median :2.984 Median :0.02459 Median :0.6667 Median :0
## Mean :2.969 Mean :0.02566 Mean :0.6512 Mean :0
## 3rd Qu.:3.151 3rd Qu.:0.03448 3rd Qu.:0.6979 3rd Qu.:0
## Max. :3.355 Max. :0.09524 Max. :1.0000 Max. :0
##
## p_146_2 p_146_3 p_146_4 p_146_5
## Min. :0.000000 Min. :0.0000000 Min. :0.5179 Min. :0.0000
## 1st Qu.:0.000000 1st Qu.:0.0000000 1st Qu.:0.6976 1st Qu.:0.1189
## Median :0.000000 Median :0.0000000 Median :0.7753 Median :0.2184
## Mean :0.006093 Mean :0.0009896 Mean :0.7807 Mean :0.2122
## 3rd Qu.:0.004310 3rd Qu.:0.0000000 3rd Qu.:0.8667 3rd Qu.:0.2920
## Max. :0.333333 Max. :0.0476191 Max. :1.0000 Max. :0.4777
##
## p_149 p_SP p_SPS p_178
## Min. :0.9125 Min. :0.6667 Min. :0.00000 Min. :0.3333
## 1st Qu.:0.9907 1st Qu.:0.9725 1st Qu.:0.04630 1st Qu.:0.6853
## Median :0.9969 Median :0.9836 Median :0.05970 Median :0.7688
## Mean :0.9905 Mean :0.9748 Mean :0.06226 Mean :0.7603
## 3rd Qu.:1.0000 3rd Qu.:0.9888 3rd Qu.:0.07432 3rd Qu.:0.8444
## Max. :1.0000 Max. :1.0000 Max. :0.15385 Max. :1.0000
##
## p_226_1 p_226_2 p_226_3 cluster
## Min. :0.0000 Min. :0.0000 Min. :0.00000 Min. :2
## 1st Qu.:0.2561 1st Qu.:0.5595 1st Qu.:0.03306 1st Qu.:2
## Median :0.3250 Median :0.6205 Median :0.04557 Median :2
## Mean :0.3342 Mean :0.6170 Mean :0.04908 Mean :2
## 3rd Qu.:0.3917 3rd Qu.:0.6951 3rd Qu.:0.05707 3rd Qu.:2
## Max. :1.0000 Max. :0.9231 Max. :0.42857 Max. :2
##
En promedio hay 2.9 habitantes por hogar en los barrios de este grupo, este grupo de barrios dentro de su población tiene en promedio un 2% de hogares que han llegado por problemas de orden público, el 65% de los hogares llevan más de 6 años viviendo en estos barrios y viven mayormente en apartamento, casi siempre propio o arrendado, en donde el agua es tomada de las entidades prestaras de servicios públicos y cuenta con acceso a los servicios públicos básicos. Al menos el 70% de los apartamentos cuentan con acceso a internet.
Grupo 3
summary(df_member[df_member$cluster == 3,])
## comuna barrio p_12 p_26
## VILLA HERMOSA:18 LA ESPERANZA : 2 Min. :3.303 Min. :0.00000
## ROBLEDO :16 SAN PABLO : 2 1st Qu.:3.529 1st Qu.:0.04695
## MANRIQUE :15 AGUAS FRÍAS : 1 Median :3.672 Median :0.07229
## ARANJUEZ :14 ALDEA PABLO VI: 1 Mean :3.694 Mean :0.08821
## CASTILLA :14 ALFONSO LÓPEZ : 1 3rd Qu.:3.839 3rd Qu.:0.11289
## SAN JAVIER :14 ALTAVISTA : 1 Max. :4.328 Max. :0.33880
## (Other) :79 (Other) :162
## p_30 p_146_1 p_146_2 p_146_3
## Min. :0.2571 Min. :0.000000 Min. :0.000000 Min. :0.000000
## 1st Qu.:0.7167 1st Qu.:0.000000 1st Qu.:0.002350 1st Qu.:0.000000
## Median :0.7632 Median :0.000000 Median :0.005291 Median :0.000000
## Mean :0.7457 Mean :0.003005 Mean :0.006637 Mean :0.001643
## 3rd Qu.:0.7962 3rd Qu.:0.001053 3rd Qu.:0.009337 3rd Qu.:0.001772
## Max. :0.9524 Max. :0.055046 Max. :0.034722 Max. :0.039474
##
## p_146_4 p_146_5 p_149 p_SP
## Min. :0.2978 Min. :0.08621 Min. :0.5079 Min. :0.5556
## 1st Qu.:0.5362 1st Qu.:0.33234 1st Qu.:0.9577 1st Qu.:0.9381
## Median :0.6132 Median :0.37480 Median :0.9855 Median :0.9649
## Mean :0.5944 Mean :0.39427 Mean :0.9496 Mean :0.9405
## 3rd Qu.:0.6605 3rd Qu.:0.45020 3rd Qu.:0.9971 3rd Qu.:0.9798
## Max. :0.9138 Max. :0.66292 Max. :1.0000 Max. :1.0000
##
## p_SPS p_178 p_226_1 p_226_2
## Min. :0.00000 Min. :0.1407 Min. :0.1947 Min. :0.1892
## 1st Qu.:0.07629 1st Qu.:0.3467 1st Qu.:0.3307 1st Qu.:0.5200
## Median :0.09801 Median :0.4618 Median :0.3609 Median :0.5564
## Mean :0.09652 Mean :0.4579 Mean :0.3692 Mean :0.5541
## 3rd Qu.:0.11640 3rd Qu.:0.5569 3rd Qu.:0.3992 3rd Qu.:0.5879
## Max. :0.24138 Max. :0.7868 Max. :0.8000 Max. :0.7632
##
## p_226_3 cluster
## Min. :0.00000 Min. :3
## 1st Qu.:0.06079 1st Qu.:3
## Median :0.07580 Median :3
## Mean :0.07818 Mean :3
## 3rd Qu.:0.09402 3rd Qu.:3
## Max. :0.22222 Max. :3
##
Barrios con promedio de 4 personas por hogar, al menos el 70% de los hogares han vivido allá por más de 6 años en sus casas o apartamentos arrendados o propios, cuantan con los servicios páblicos básicos, solo el 9% de ellos tienen suspendido alguno de los servicios , menos del 45% de los hogares de este grupo no tienen internet. 8% de los hogares de este barrio han llegado al sector por problemas de orden público.
Análisis general de los grupos de acuerdo a las preguntas de la Encuesta de Calidad de Vida de Medellín
ECV_VIVIENDA_KMEANS <- kmeans_model$centers
ECV_VIVIENDA_KMEANS <- data.frame(ECV_VIVIENDA_KMEANS)
ECV_VIVIENDA_KMEANS %>% tibble::rownames_to_column("cluster") -> ECV_VIVIENDA_KMEANS
ECV_VIVIENDA_KMEANS$cluster <- as.factor(ECV_VIVIENDA_KMEANS$cluster)
summary_cluster_means <- ggparcoord(data = ECV_VIVIENDA_KMEANS, columns = c(2:14), groupColumn = "cluster", scale = "globalminmax", showPoints = TRUE, alphaLines = 0.5) + labs(x = "Indicador / Preguntas", y = "Medias", title = "Análisis General de los cluster de acuerdo a las preguntas de la dimensión") + theme(plot.title = element_text(size=12), axis.text=element_text(size=8))
ggplotly(summary_cluster_means)
Caracteristicas que distinguen un grupo de barrios de otro
Grupo 1: se caracterizan por vivir mayoremente en casas propias, el acceso al agua proviene principalmente de otros medios diferentes a las entidades prestadoras de servicios y la gran mayoría de la población no cuenta con servicios públicos básicos ni internet
Grupo 2: se caracterizan por tener menos personas por hogar, viven mayormente en apartamentos propios con acceso a los servicios públicos básicos e internet
Grupo 3: se caracterizan por tener más población en su hogar y combinar sus viviendas entre apartamentos y casas
Conozcamos algunos barrios que pertenecen a cada uno de estos grupos
#df_member[order(df_member$cluster),]
head(df_member[df_member$cluster == 1,]$barrio)
## [1] ALTAVISTA CENTRAL BUGA PATIO BONITO EL CORAZÓN EL MORRO
## [4] SAN JOSÉ DEL MANZANILLO CORREGIMIENTO PALMITAS LA ALDEA
## 299 Levels: AGUAS FRÍAS ALDEA PABLO VI ALEJANDRÍA ... YARUMALITO
head(df_member[df_member$cluster == 2,]$barrio)
## [1] ÁREA DE EXPANSIÓN BELÉN RINCÓN BELÉN
## [3] CERRO NUTIBARA DIEGO ECHAVARRÍA
## [5] EL NOGAL - LOS ALMENDROS FÁTIMA
## 299 Levels: AGUAS FRÍAS ALDEA PABLO VI ALEJANDRÍA ... YARUMALITO
head(df_member[df_member$cluster == 3,]$barrio)
## [1] AGUAS FRÍAS ÁREA DE EXPANSIÓN ALTAVISTA
## [3] CABECERA ALTAVISTA EL JARDÍN
## [5] LA ESPERANZA SAN PABLO
## 299 Levels: AGUAS FRÍAS ALDEA PABLO VI ALEJANDRÍA ... YARUMALITO
##3. Análisis espacial
Se cargan las subdivisiones territoriales de Medellín, tomadas de la página web de opendata[2]
barrios_med <- readOGR("./dataSet/Barrio_Vereda/Barrio_Vereda.shp",layer="Barrio_Vereda")
## OGR data source with driver: ESRI Shapefile
## Source: "/Users/yosel/Desktop/Especializacion/AprendizajeEstadistico/Agrupamiento/Taller 01/TAE_T1/dataSet/Barrio_Vereda/Barrio_Vereda.shp", layer: "Barrio_Vereda"
## with 332 features
## It has 6 fields
## Integer64 fields read as strings: OBJECTID SUBTIPO_BA
#Conversión de codificaciones
nombres_barrios <- iconv(barrios_med@data$NOMBRE,"UTF-8","ISO_8859-1")
df_member$barrio <- tolower(df_member$barrio)
Función que busca capitalizar los nombres de los barrios
Caps <- function(x) {
s <- strsplit(x, " ")[[1]]
paste(toupper(substring(s, 1,1)), substring(s, 2), sep="", collapse=" ")
}
df_member$barrio <- sapply(df_member$barrio, Caps)
Debido a inconsistenias entre los nombres de los barrios de la data de poligonos y los nombres de los barrios de la Encuesta de Calidad de Vida, se procede a realizar reemplazos manuales
df_member$barrio[df_member$barrio == "Barrios De Jesús"] <- "Barrios de Jesús"
df_member$barrio[df_member$barrio == "Piedras Blancas"] <- "Piedras Blancas - Matasano"
df_member$barrio[df_member$barrio == "Area Expansion San Antonio De Prado"] <- "Ã\u0081rea de Expansión San Antonio de Prado"
df_member$barrio[df_member$barrio == "Prado"] <- "San Antonio de Prado"
df_member$barrio[df_member$barrio == "Altavista Central"] <- "Altavista Sector Central"
df_member$barrio[df_member$barrio == "San José Del Manzanillo"] <- "San José del Manzanillo"
df_member$barrio[df_member$barrio == "El Yolombo"] <- "Yolombo"
df_member$barrio[df_member$barrio == "Urquita"] <- "Urquitá"
df_member$barrio[df_member$barrio == "Corregimiento Palmitas"] <- "Palmitas Sector Central"
df_member$barrio[df_member$barrio == "San Jose De La Montaña"] <- "San José de La Montaña"
df_member$barrio[df_member$barrio == "Cabecera San Cristóbal"] <- "Cabecera Urbana Corregimiento San Cristóbal"
df_member$barrio[df_member$barrio == "Area Expansion Pajarito"] <- "Ãrea de Expansión Pajarito"
df_member$barrio[df_member$barrio == "Area De Expancion San Cristobal"] <- "Ãrea de Expansión San Cristóbal"
df_member$barrio[df_member$barrio == "Santa Maria De Los ángeles"] <- "Santa MarÃ�a de Los Ãngeles"
df_member$barrio[df_member$barrio == "Juan Pablo Ii"] <- "Parque Juan Pablo II"
df_member$barrio[df_member$barrio == "Bombona No.1"] <- "Bomboná No.1"
df_member$barrio[df_member$barrio == "Bombona No.2"] <- "Bomboná No.2"
df_member$barrio[df_member$barrio == "La Asomadera No.1"] <- "Asomadera No.1"
df_member$barrio[df_member$barrio == "La Asomadera No.2"] <- "Asomadera No.2"
df_member$barrio[df_member$barrio == "Los Cerros El Verjel"] <- "Los Cerros El Vergel"
df_member$barrio[df_member$barrio == "Villa Tina"] <- "Villatina"
df_member$barrio[df_member$barrio == "Santa Ines"] <- "Santa Inés"
df_member$barrio[df_member$barrio == "Campo Valdes No.2"] <- "Campo Valdés No.2"
df_member$barrio[df_member$barrio == "Progreso"] <- "El Progreso"
df_member$barrio[df_member$barrio == "Progreso no.2"] <- "Progreso No.2"
df_member$barrio[df_member$barrio == "Doce De Octubre No.1"] <- "Doce de Octubre No.1"
df_member$barrio[df_member$barrio == "Doce De Octubre No.2"] <- "Doce de Octubre No.2"
df_member$barrio[df_member$barrio == "Santo Domingo Sabio No.1"] <- "Santo Domingo Savio No.1"
df_member$barrio[df_member$barrio == "Santo Domingo Sabio No.2"] <- "Santo Domingo Savio No.2"
df_member$barrio[df_member$barrio == "Moscu No.1"] <- "Moscú No.1"
df_member$barrio[df_member$barrio == "Moscu No.2"] <- "Moscú No.2"
df_member$barrio[df_member$barrio == "San Josela Cima No.1"] <- "San José La Cima No.1"
df_member$barrio[df_member$barrio == "San Jose La Cima No.2"] <- "San José La Cima No.2"
df_member$barrio[df_member$barrio == "Villa Del Socorro"] <- "Villa del Socorro"
df_member$barrio[df_member$barrio == "El Playon De Los Comuneros"] <- "Playón de Los Comuneros"
df_member$barrio[df_member$barrio == "Santa Fe"] <- "Santa Fé"
df_member$barrio[df_member$barrio == "Santa Rosa De Lima"] <- "Santa Rosa de Lima"
df_member$barrio[df_member$barrio == "Alejandro EchavarrÃa"] <- "Alejandro EchavarrÃ�a"
df_member$barrio[df_member$barrio == "Mira Flores"] <- "Miraflores"
df_member$barrio[df_member$barrio == "Ocho De Marzo"] <- "Ocho de Marzo"
df_member$barrio[df_member$barrio == "Villa Lilliam"] <- "Villa Liliam"
df_member$barrio[df_member$barrio == "Altos Del Poblado"] <- "Altos del Poblado"
df_member$barrio[df_member$barrio == "Villa Lilliam"] <- "Villa Liliam"
df_member$barrio[df_member$barrio == "La Loma De Los Bernal"] <- "La Loma de Los Bernal"
df_member$barrio[df_member$barrio == "área De Expansión Belén Rincón"] <- "Ãrea de Expansión Belén Rincón"
df_member$barrio[df_member$barrio == "Carlos E Restrepo"] <- "Carlos E. Restrepo"
df_member$barrio[df_member$barrio == "área De Expansión Belén Rincón"] <- "Ãrea de Expansión Belén Rincón"
Selección de los campos necesarios, barrio y cluster
df_member %>% select(barrio, cluster) -> df_member
Se unen los dataframe de barrios_med en donde se encuentra los poligonos de los barrios de Medellín con su respectivo cluster
barrios_cluster <- merge(barrios_med, df_member[!duplicated(df_member$barrio), ], by.x="NOMBRE", by.y="barrio", all.x = TRUE)
Se procede a dibujar el mapa de Medellín señalando cada uno de los barrios a que cluster pertenece
map <-leaflet(barrios_cluster)
factpal <- colorFactor(topo.colors(4), barrios_cluster$cluster)
map <- addPolygons(map, popup = nombres_barrios, color = ~factpal(cluster),
dashArray = "2",
fillOpacity = 0.7,
highlight = highlightOptions(
weight = 5,
color = "#666",
dashArray = "",
fillOpacity = 0.7,
bringToFront = TRUE),
#label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto"))
map <- addTiles(map)
map